home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Format 1995 June
/
MacFormat 25.iso
/
Shareware City
/
Developers
/
OutOfPhase1.1 Source
/
OutOfPhase Folder
/
LFOListSpecifier.c
< prev
next >
Wrap
Text File
|
1994-08-15
|
4KB
|
121 lines
/* LFOListSpecifier.c */
/*****************************************************************************/
/* */
/* Out Of Phase: Digital Music Synthesis on General Purpose Computers */
/* Copyright (C) 1994 Thomas R. Lawrence */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 2 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program; if not, write to the Free Software */
/* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* */
/* Thomas R. Lawrence can be reached at tomlaw@world.std.com. */
/* */
/*****************************************************************************/
#include "MiscInfo.h"
#include "Audit.h"
#include "Debug.h"
#include "Definitions.h"
#include "LFOListSpecifier.h"
#include "Memory.h"
#include "LFOSpecifier.h"
struct LFOListSpecRec
{
long NumLFOSpecs;
struct LFOSpecRec** Array;
};
/* allocate a new LFO spec list */
LFOListSpecRec* NewLFOListSpecifier(void)
{
LFOListSpecRec* LFOListSpec;
LFOListSpec = (LFOListSpecRec*)AllocPtrCanFail(sizeof(LFOListSpecRec),
"LFOListSpecRec");
if (LFOListSpec == NIL)
{
FailurePoint1:
return NIL;
}
LFOListSpec->Array = (struct LFOSpecRec**)AllocPtrCanFail(0,"LFOListSpecRec Array");
if (LFOListSpec->Array == NIL)
{
FailurePoint2:
ReleasePtr((char*)LFOListSpec);
goto FailurePoint1;
}
LFOListSpec->NumLFOSpecs = 0;
return LFOListSpec;
}
/* dispose of an LFO spec list and all the specs inside of it */
void DisposeLFOListSpecifier(LFOListSpecRec* LFOListSpec)
{
long Scan;
CheckPtrExistence(LFOListSpec);
for (Scan = 0; Scan < LFOListSpec->NumLFOSpecs; Scan += 1)
{
PRNGCHK(LFOListSpec->Array,&(LFOListSpec->Array[Scan]),
sizeof(LFOListSpec->Array[Scan]));
DisposeLFOSpecifier(LFOListSpec->Array[Scan]);
}
ReleasePtr((char*)LFOListSpec->Array);
ReleasePtr((char*)LFOListSpec);
}
/* get a LFOSpecRec out of the list */
struct LFOSpecRec* LFOListSpecGetLFOSpec(LFOListSpecRec* LFOListSpec, long Index)
{
CheckPtrExistence(LFOListSpec);
ERROR((Index < 0) || (Index >= LFOListSpec->NumLFOSpecs),PRERR(ForceAbort,
"LFOListSpecGetLFOSpec: index out of range"));
PRNGCHK(LFOListSpec->Array,&(LFOListSpec->Array[Index]),
sizeof(LFOListSpec->Array[Index]));
return LFOListSpec->Array[Index];
}
/* create a new LFO spec entry in the list */
MyBoolean LFOListSpecAppendNewEntry(LFOListSpecRec* LFOListSpec,
struct LFOSpecRec* NewEntry)
{
struct LFOSpecRec** NewArray;
CheckPtrExistence(LFOListSpec);
NewArray = (struct LFOSpecRec**)ResizePtr((char*)LFOListSpec->Array,
sizeof(struct LFOSpecRec*) * (LFOListSpec->NumLFOSpecs + 1));
if (NewArray == NIL)
{
return False;
}
LFOListSpec->Array = NewArray;
LFOListSpec->Array[LFOListSpec->NumLFOSpecs] = NewEntry;
LFOListSpec->NumLFOSpecs += 1;
return True;
}
/* get the number of elements in the list */
long LFOListSpecGetNumElements(LFOListSpecRec* LFOListSpec)
{
CheckPtrExistence(LFOListSpec);
return LFOListSpec->NumLFOSpecs;
}